<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::Edge&lt; PointInT, PointOutT &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1_edge.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pri-types">Private 类型</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1_edge-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::Edge&lt; PointInT, PointOutT &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:a545642bafc541f675a74a31583a5f310"><td class="memItemLeft" align="right" valign="top"><a id="a545642bafc541f675a74a31583a5f310"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>OUTPUT_TYPE</b> { <br />
&#160;&#160;<b>OUTPUT_Y</b>
, <b>OUTPUT_X</b>
, <b>OUTPUT_X_Y</b>
, <b>OUTPUT_MAGNITUDE</b>
, <br />
&#160;&#160;<b>OUTPUT_DIRECTION</b>
, <b>OUTPUT_MAGNITUDE_DIRECTION</b>
, <b>OUTPUT_ALL</b>
<br />
 }</td></tr>
<tr class="separator:a545642bafc541f675a74a31583a5f310"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad150d45deb291a8588a5732871a39131"><td class="memItemLeft" align="right" valign="top"><a id="ad150d45deb291a8588a5732871a39131"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>DETECTOR_KERNEL_TYPE</b> { <br />
&#160;&#160;<b>CANNY</b>
, <b>SOBEL</b>
, <b>PREWITT</b>
, <b>ROBERTS</b>
, <br />
&#160;&#160;<b>LOG</b>
, <b>DERIVATIVE_CENTRAL</b>
, <b>DERIVATIVE_FORWARD</b>
, <b>DERIVATIVE_BACKWARD</b>
<br />
 }</td></tr>
<tr class="separator:ad150d45deb291a8588a5732871a39131"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad21aa051183c2951a81cf7a51f4afb24"><td class="memItemLeft" align="right" valign="top"><a id="ad21aa051183c2951a81cf7a51f4afb24"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_edge.html">Edge</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:ad21aa051183c2951a81cf7a51f4afb24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a800d6fc1480ec5784cb6580fb9a3bca4"><td class="memItemLeft" align="right" valign="top"><a id="a800d6fc1480ec5784cb6580fb9a3bca4"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_edge.html">Edge</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a800d6fc1480ec5784cb6580fb9a3bca4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:a0ccda4c15b8537ec3ff3639f8dadf49c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a0ccda4c15b8537ec3ff3639f8dadf49c">setOutputType</a> (OUTPUT_TYPE output_type)</td></tr>
<tr class="memdesc:a0ccda4c15b8537ec3ff3639f8dadf49c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the output type.  <a href="classpcl_1_1_edge.html#a0ccda4c15b8537ec3ff3639f8dadf49c">更多...</a><br /></td></tr>
<tr class="separator:a0ccda4c15b8537ec3ff3639f8dadf49c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade2526ccd7b8db14204060e19226ca4c"><td class="memItemLeft" align="right" valign="top"><a id="ade2526ccd7b8db14204060e19226ca4c"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>setHysteresisThresholdLow</b> (float threshold)</td></tr>
<tr class="separator:ade2526ccd7b8db14204060e19226ca4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03fa4202f2387b218a0c73a330c565a5"><td class="memItemLeft" align="right" valign="top"><a id="a03fa4202f2387b218a0c73a330c565a5"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>setHysteresisThresholdHigh</b> (float threshold)</td></tr>
<tr class="separator:a03fa4202f2387b218a0c73a330c565a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d4992dd5bf3458ad013c55885a9a175"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a5d4992dd5bf3458ad013c55885a9a175">sobelMagnitudeDirection</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;input_x, const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;input_y, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="separator:a5d4992dd5bf3458ad013c55885a9a175"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a489705e4da536a97081c1fbf7ac2ea79"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a489705e4da536a97081c1fbf7ac2ea79">canny</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;input_x, const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;input_y, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a489705e4da536a97081c1fbf7ac2ea79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform Canny edge detection with two separated input images for horizontal and vertical derivatives. All edges of magnitude above t_high are always classified as edges. All edges below t_low are discarded. <a class="el" href="classpcl_1_1_edge.html">Edge</a> values between t_low and t_high are classified as edges only if they are connected to edges having magnitude &gt; t_high and are located in a direction perpendicular to that strong edge.  <a href="classpcl_1_1_edge.html#a489705e4da536a97081c1fbf7ac2ea79">更多...</a><br /></td></tr>
<tr class="separator:a489705e4da536a97081c1fbf7ac2ea79"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b924726c691308a9a50cad6be8b2eb0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a1b924726c691308a9a50cad6be8b2eb0">detectEdge</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a1b924726c691308a9a50cad6be8b2eb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is a convenience function which performs edge detection based on the variable detector_kernel_type_  <a href="classpcl_1_1_edge.html#a1b924726c691308a9a50cad6be8b2eb0">更多...</a><br /></td></tr>
<tr class="separator:a1b924726c691308a9a50cad6be8b2eb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad4e235b723af6970e5337d53004116d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#aad4e235b723af6970e5337d53004116d">detectEdgeCanny</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:aad4e235b723af6970e5337d53004116d"><td class="mdescLeft">&#160;</td><td class="mdescRight">All edges of magnitude above t_high are always classified as edges. All edges below t_low are discarded. <a class="el" href="classpcl_1_1_edge.html">Edge</a> values between t_low and t_high are classified as edges only if they are connected to edges having magnitude &gt; t_high and are located in a direction perpendicular to that strong edge.  <a href="classpcl_1_1_edge.html#aad4e235b723af6970e5337d53004116d">更多...</a><br /></td></tr>
<tr class="separator:aad4e235b723af6970e5337d53004116d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ffab54efcbfd029b6d758770e7e5da1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a3ffab54efcbfd029b6d758770e7e5da1">detectEdgeSobel</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a3ffab54efcbfd029b6d758770e7e5da1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uses the Sobel kernel for edge detection. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a3ffab54efcbfd029b6d758770e7e5da1">更多...</a><br /></td></tr>
<tr class="separator:a3ffab54efcbfd029b6d758770e7e5da1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2fde1fd46a127c891ff8ade9e1c2c1e2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a2fde1fd46a127c891ff8ade9e1c2c1e2">detectEdgePrewitt</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a2fde1fd46a127c891ff8ade9e1c2c1e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uses the Prewitt kernel for edge detection. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a2fde1fd46a127c891ff8ade9e1c2c1e2">更多...</a><br /></td></tr>
<tr class="separator:a2fde1fd46a127c891ff8ade9e1c2c1e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7abd51b78b9049d54385478b03533150"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a7abd51b78b9049d54385478b03533150">detectEdgeRoberts</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a7abd51b78b9049d54385478b03533150"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uses the Roberts kernel for edge detection. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a7abd51b78b9049d54385478b03533150">更多...</a><br /></td></tr>
<tr class="separator:a7abd51b78b9049d54385478b03533150"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a322ca7dc5db4d05189e53b1acbad3cb6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a322ca7dc5db4d05189e53b1acbad3cb6">detectEdgeLoG</a> (const float kernel_sigma, const float kernel_size, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a322ca7dc5db4d05189e53b1acbad3cb6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Uses the LoG kernel for edge detection. Zero crossings of the Laplacian operator applied on an image indicate edges. Gaussian kernel is used to smoothen the image prior to the Laplacian. This is because Laplacian uses the second order derivative of the image and hence, is very sensitive to noise. The implementation is not two-step but rather applies the LoG kernel directly.  <a href="classpcl_1_1_edge.html#a322ca7dc5db4d05189e53b1acbad3cb6">更多...</a><br /></td></tr>
<tr class="separator:a322ca7dc5db4d05189e53b1acbad3cb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a82119d613bffbc9ce96b8a65f56de15b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a82119d613bffbc9ce96b8a65f56de15b">computeDerivativeXCentral</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a82119d613bffbc9ce96b8a65f56de15b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the image derivatives in X direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ae9872c476d857b7665ae966f5fbb7009">kernel::derivativeYCentralKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a82119d613bffbc9ce96b8a65f56de15b">更多...</a><br /></td></tr>
<tr class="separator:a82119d613bffbc9ce96b8a65f56de15b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad720a4a1f05e90ce19c038fd7850890c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#ad720a4a1f05e90ce19c038fd7850890c">computeDerivativeYCentral</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:ad720a4a1f05e90ce19c038fd7850890c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the image derivatives in Y direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ae9872c476d857b7665ae966f5fbb7009">kernel::derivativeYCentralKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#ad720a4a1f05e90ce19c038fd7850890c">更多...</a><br /></td></tr>
<tr class="separator:ad720a4a1f05e90ce19c038fd7850890c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3227632412f8b6edda7dd1da7c6f4c02"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a3227632412f8b6edda7dd1da7c6f4c02">computeDerivativeXForward</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a3227632412f8b6edda7dd1da7c6f4c02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the image derivatives in X direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ace4fa042f97d503bf18a8311c77211ec">kernel::derivativeYForwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a3227632412f8b6edda7dd1da7c6f4c02">更多...</a><br /></td></tr>
<tr class="separator:a3227632412f8b6edda7dd1da7c6f4c02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e4450135f1076257c5a50d1d2b7427e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a0e4450135f1076257c5a50d1d2b7427e">computeDerivativeYForward</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a0e4450135f1076257c5a50d1d2b7427e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the image derivatives in Y direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ace4fa042f97d503bf18a8311c77211ec">kernel::derivativeYForwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a0e4450135f1076257c5a50d1d2b7427e">更多...</a><br /></td></tr>
<tr class="separator:a0e4450135f1076257c5a50d1d2b7427e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a805afa618ffc093ab12cd4253ce7137c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a805afa618ffc093ab12cd4253ce7137c">computeDerivativeXBackward</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a805afa618ffc093ab12cd4253ce7137c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the image derivatives in X direction using the kernel <a class="el" href="classpcl_1_1kernel.html#a0ea50bec02fb57c62f38caeb48f1c877">kernel::derivativeXBackwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a805afa618ffc093ab12cd4253ce7137c">更多...</a><br /></td></tr>
<tr class="separator:a805afa618ffc093ab12cd4253ce7137c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23a73f6f318bd1bd5038a74e60181895"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a23a73f6f318bd1bd5038a74e60181895">computeDerivativeYBackward</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;output)</td></tr>
<tr class="memdesc:a23a73f6f318bd1bd5038a74e60181895"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the image derivatives in Y direction using the kernel <a class="el" href="classpcl_1_1kernel.html#a233c00432f403a1157ac8cef7526dcc7">kernel::derivativeYBackwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise.  <a href="classpcl_1_1_edge.html#a23a73f6f318bd1bd5038a74e60181895">更多...</a><br /></td></tr>
<tr class="separator:a23a73f6f318bd1bd5038a74e60181895"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20df146859d075581befb3db08b71fd6"><td class="memItemLeft" align="right" valign="top"><a id="a20df146859d075581befb3db08b71fd6"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a20df146859d075581befb3db08b71fd6">applyFilter</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;)</td></tr>
<tr class="memdesc:a20df146859d075581befb3db08b71fd6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override function to implement the <a class="el" href="classpcl_1_1_filter.html" title="Filter represents the base filter class. All filters must inherit from this interface.">pcl::Filter</a> interface <br /></td></tr>
<tr class="separator:a20df146859d075581befb3db08b71fd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe82b3dce432591dcda8c6a2fcc976ba"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#afe82b3dce432591dcda8c6a2fcc976ba">setInputCloud</a> (PointCloudInPtr input)</td></tr>
<tr class="memdesc:afe82b3dce432591dcda8c6a2fcc976ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the input point cloud pointer  <a href="classpcl_1_1_edge.html#afe82b3dce432591dcda8c6a2fcc976ba">更多...</a><br /></td></tr>
<tr class="separator:afe82b3dce432591dcda8c6a2fcc976ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-types"></a>
Private 类型</h2></td></tr>
<tr class="memitem:ad5731a359aed52efa97ce48c51646c61"><td class="memItemLeft" align="right" valign="top"><a id="ad5731a359aed52efa97ce48c51646c61"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudIn</b></td></tr>
<tr class="separator:ad5731a359aed52efa97ce48c51646c61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6194130f7cdb70c74aa2d6921405246a"><td class="memItemLeft" align="right" valign="top"><a id="a6194130f7cdb70c74aa2d6921405246a"></a>
typedef PointCloudIn::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudInPtr</b></td></tr>
<tr class="separator:a6194130f7cdb70c74aa2d6921405246a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:a4eab43d268ca04cfd96795b42b2d5184"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (int rowOffset, int colOffset, int row, int col, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i.html">pcl::PointXYZI</a> &gt; &amp;maxima)</td></tr>
<tr class="memdesc:a4eab43d268ca04cfd96795b42b2d5184"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function performs edge tracing for Canny <a class="el" href="classpcl_1_1_edge.html">Edge</a> detector.  <a href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">更多...</a><br /></td></tr>
<tr class="separator:a4eab43d268ca04cfd96795b42b2d5184"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ea900b41e25ccdef54f60b968b64e10"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#a1ea900b41e25ccdef54f60b968b64e10">discretizeAngles</a> (<a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;thet)</td></tr>
<tr class="memdesc:a1ea900b41e25ccdef54f60b968b64e10"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function discretizes the edge directions in steps of 22.5 degrees.  <a href="classpcl_1_1_edge.html#a1ea900b41e25ccdef54f60b968b64e10">更多...</a><br /></td></tr>
<tr class="separator:a1ea900b41e25ccdef54f60b968b64e10"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acdff65ad2e8341465470ef684b508f47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_edge.html#acdff65ad2e8341465470ef684b508f47">suppressNonMaxima</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i_edge.html">PointXYZIEdge</a> &gt; &amp;edges, <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i.html">pcl::PointXYZI</a> &gt; &amp;maxima, float tLow)</td></tr>
<tr class="memdesc:acdff65ad2e8341465470ef684b508f47"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function suppresses the edges which don't form a local maximum in the edge direction.  <a href="classpcl_1_1_edge.html#acdff65ad2e8341465470ef684b508f47">更多...</a><br /></td></tr>
<tr class="separator:acdff65ad2e8341465470ef684b508f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a21510d7bfd0a117ee4f6d6d73cc2086a"><td class="memItemLeft" align="right" valign="top"><a id="a21510d7bfd0a117ee4f6d6d73cc2086a"></a>
PointCloudInPtr&#160;</td><td class="memItemRight" valign="bottom"><b>input_</b></td></tr>
<tr class="separator:a21510d7bfd0a117ee4f6d6d73cc2086a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac628d968e38221924c857814aa6ffa0f"><td class="memItemLeft" align="right" valign="top"><a id="ac628d968e38221924c857814aa6ffa0f"></a>
<a class="el" href="classpcl_1_1_convolution.html">pcl::Convolution</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>convolution_</b></td></tr>
<tr class="separator:ac628d968e38221924c857814aa6ffa0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a654653608003805d1c617c5da4825f32"><td class="memItemLeft" align="right" valign="top"><a id="a654653608003805d1c617c5da4825f32"></a>
<a class="el" href="classpcl_1_1kernel.html">kernel</a>&lt; PointInT &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>kernel_</b></td></tr>
<tr class="separator:a654653608003805d1c617c5da4825f32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa76bffc84d9ccb41d2fdcd8d13aa1ba5"><td class="memItemLeft" align="right" valign="top"><a id="aa76bffc84d9ccb41d2fdcd8d13aa1ba5"></a>
OUTPUT_TYPE&#160;</td><td class="memItemRight" valign="bottom"><b>output_type_</b></td></tr>
<tr class="separator:aa76bffc84d9ccb41d2fdcd8d13aa1ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b37703d34729b3680ecfd0e499b8f99"><td class="memItemLeft" align="right" valign="top"><a id="a0b37703d34729b3680ecfd0e499b8f99"></a>
DETECTOR_KERNEL_TYPE&#160;</td><td class="memItemRight" valign="bottom"><b>detector_kernel_type_</b></td></tr>
<tr class="separator:a0b37703d34729b3680ecfd0e499b8f99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ba43eb29af8dee6f3a2723f5d270f11"><td class="memItemLeft" align="right" valign="top"><a id="a6ba43eb29af8dee6f3a2723f5d270f11"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>non_maximal_suppression_</b></td></tr>
<tr class="separator:a6ba43eb29af8dee6f3a2723f5d270f11"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b39c7087a9e06d14dfea4e8e0e1e60f"><td class="memItemLeft" align="right" valign="top"><a id="a9b39c7087a9e06d14dfea4e8e0e1e60f"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>hysteresis_thresholding_</b></td></tr>
<tr class="separator:a9b39c7087a9e06d14dfea4e8e0e1e60f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a6e60367f5c389c0014c6c9bd08c35a"><td class="memItemLeft" align="right" valign="top"><a id="a3a6e60367f5c389c0014c6c9bd08c35a"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>hysteresis_threshold_low_</b></td></tr>
<tr class="separator:a3a6e60367f5c389c0014c6c9bd08c35a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7952f57b3cb02026a389a8484e6ff02"><td class="memItemLeft" align="right" valign="top"><a id="af7952f57b3cb02026a389a8484e6ff02"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>hysteresis_threshold_high_</b></td></tr>
<tr class="separator:af7952f57b3cb02026a389a8484e6ff02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af48f416c88face3ec28a7401f767c1f5"><td class="memItemLeft" align="right" valign="top"><a id="af48f416c88face3ec28a7401f767c1f5"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>non_max_suppression_radius_x_</b></td></tr>
<tr class="separator:af48f416c88face3ec28a7401f767c1f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4be42befd12976e1df413400462ce7c"><td class="memItemLeft" align="right" valign="top"><a id="ae4be42befd12976e1df413400462ce7c"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>non_max_suppression_radius_y_</b></td></tr>
<tr class="separator:ae4be42befd12976e1df413400462ce7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">成员函数说明</h2>
<a id="a489705e4da536a97081c1fbf7ac2ea79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a489705e4da536a97081c1fbf7ac2ea79">&#9670;&nbsp;</a></span>canny()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::canny </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Perform Canny edge detection with two separated input images for horizontal and vertical derivatives. All edges of magnitude above t_high are always classified as edges. All edges below t_low are discarded. <a class="el" href="classpcl_1_1_edge.html">Edge</a> values between t_low and t_high are classified as edges only if they are connected to edges having magnitude &gt; t_high and are located in a direction perpendicular to that strong edge. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_x</td><td>Input point cloud passed by reference for the first derivative in the horizontal direction </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_y</td><td>Input point cloud passed by reference for the first derivative in the vertical direction </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;{</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;  <span class="keywordtype">float</span> tHigh = hysteresis_threshold_high_;</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  <span class="keywordtype">float</span> tLow = hysteresis_threshold_low_;</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = input_x.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = input_x.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160; </div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (height * width);</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = height;</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = width;</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160; </div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;  <span class="comment">// Noise reduction using gaussian blurring</span></div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr gaussian_kernel (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a28e930f16d7fda57f01372fd16e53ca2">setKernelSize</a> (3);</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a395a7f5e67afda97af97e2986881ee56">setKernelSigma</a> (1.0);</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a7c2a2b5986b6dcef92edb2a39e0cca77">kernel&lt;PointXYZI&gt;::GAUSSIAN</a>);</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*gaussian_kernel);</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*gaussian_kernel);</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160; </div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;  PointCloudIn smoothed_cloud_x;</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_x.<a class="code" href="classpcl_1_1_point_cloud.html#afebbbb9c522a94cf245dd3968b50ed5e">makeShared</a>());</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (smoothed_cloud_x);</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160; </div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;  PointCloudIn smoothed_cloud_y;</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_y.<a class="code" href="classpcl_1_1_point_cloud.html#afebbbb9c522a94cf245dd3968b50ed5e">makeShared</a>());</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (smoothed_cloud_y);</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160; </div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160; </div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;  <span class="comment">// Edge detection usign Sobel</span></div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;  pcl::PointCloud&lt;PointXYZIEdge&gt;::Ptr edges (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZIEdge&gt;</a>);</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;  <a class="code" href="classpcl_1_1_edge.html#a5d4992dd5bf3458ad013c55885a9a175">sobelMagnitudeDirection</a> (smoothed_cloud_x, smoothed_cloud_y, *edges.get ());</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160; </div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;  <span class="comment">// Edge discretization</span></div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;  <a class="code" href="classpcl_1_1_edge.html#a1ea900b41e25ccdef54f60b968b64e10">discretizeAngles</a> (*edges);</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160; </div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr maxima (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;  <a class="code" href="classpcl_1_1_edge.html#acdff65ad2e8341465470ef684b508f47">suppressNonMaxima</a> (*edges, *maxima, tLow);</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160; </div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  <span class="comment">// Edge tracing</span></div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; height; i++)</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;  {</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; width; j++)</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    {</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;      <span class="keywordflow">if</span> ((*maxima)(j, i).intensity &lt; tHigh || (*maxima)(j, i).intensity == std::numeric_limits&lt;float&gt;::max ())</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160; </div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;      (*maxima)(j, i).intensity = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, 0, i, j, *maxima);</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, 0, i, j, *maxima);</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, 1, i, j, *maxima);</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, -1, i, j, *maxima);</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 0, -1, i, j, *maxima);</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 0, 1, i, j, *maxima);</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, 1, i, j, *maxima);</div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, -1, i, j, *maxima);</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    }</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;  }</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160; </div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  <span class="comment">// Final thresholding</span></div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; height; i++)</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;  {</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; width; j++)</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    {</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;      <span class="keywordflow">if</span> ((*maxima)(j, i).intensity == std::numeric_limits&lt;float&gt;::max ())</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;        output (j, i).magnitude = 255;</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        output (j, i).magnitude = 0;</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    }</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;  }</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_convolution_html_abd56054085b145cba9e22eac32f49ad3"><div class="ttname"><a href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">pcl::Convolution::setKernel</a></div><div class="ttdeci">void setKernel(const pcl::PointCloud&lt; PointT &gt; &amp;kernel)</div><div class="ttdoc">Sets the kernel to be used for convolution</div><div class="ttdef"><b>Definition:</b> convolution.h:116</div></div>
<div class="ttc" id="aclasspcl_1_1_convolution_html_ad67fdb49fef519511a8332271f1ae18d"><div class="ttname"><a href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">pcl::Convolution::filter</a></div><div class="ttdeci">void filter(pcl::PointCloud&lt; PointT &gt; &amp;output)</div><div class="ttdoc">Performs 2D convolution of the input point cloud with the kernel. Uses clamp as the default boundary ...</div><div class="ttdef"><b>Definition:</b> convolution.hpp:43</div></div>
<div class="ttc" id="aclasspcl_1_1_edge_html_a1ea900b41e25ccdef54f60b968b64e10"><div class="ttname"><a href="classpcl_1_1_edge.html#a1ea900b41e25ccdef54f60b968b64e10">pcl::Edge::discretizeAngles</a></div><div class="ttdeci">void discretizeAngles(pcl::PointCloud&lt; PointOutT &gt; &amp;thet)</div><div class="ttdoc">This function discretizes the edge directions in steps of 22.5 degrees.</div><div class="ttdef"><b>Definition:</b> edge.hpp:238</div></div>
<div class="ttc" id="aclasspcl_1_1_edge_html_a4eab43d268ca04cfd96795b42b2d5184"><div class="ttname"><a href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">pcl::Edge::cannyTraceEdge</a></div><div class="ttdeci">void cannyTraceEdge(int rowOffset, int colOffset, int row, int col, pcl::PointCloud&lt; pcl::PointXYZI &gt; &amp;maxima)</div><div class="ttdoc">This function performs edge tracing for Canny Edge detector.</div><div class="ttdef"><b>Definition:</b> edge.hpp:211</div></div>
<div class="ttc" id="aclasspcl_1_1_edge_html_a5d4992dd5bf3458ad013c55885a9a175"><div class="ttname"><a href="classpcl_1_1_edge.html#a5d4992dd5bf3458ad013c55885a9a175">pcl::Edge::sobelMagnitudeDirection</a></div><div class="ttdeci">void sobelMagnitudeDirection(const pcl::PointCloud&lt; PointInT &gt; &amp;input_x, const pcl::PointCloud&lt; PointInT &gt; &amp;input_y, pcl::PointCloud&lt; PointOutT &gt; &amp;output)</div><div class="ttdef"><b>Definition:</b> edge.hpp:91</div></div>
<div class="ttc" id="aclasspcl_1_1_edge_html_acdff65ad2e8341465470ef684b508f47"><div class="ttname"><a href="classpcl_1_1_edge.html#acdff65ad2e8341465470ef684b508f47">pcl::Edge::suppressNonMaxima</a></div><div class="ttdeci">void suppressNonMaxima(const pcl::PointCloud&lt; PointXYZIEdge &gt; &amp;edges, pcl::PointCloud&lt; pcl::PointXYZI &gt; &amp;maxima, float tLow)</div><div class="ttdoc">This function suppresses the edges which don't form a local maximum in the edge direction.</div><div class="ttdef"><b>Definition:</b> edge.hpp:265</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_a1952d7101f3942bac3b69ed55c1ca7ea"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">pcl::PCLBase::setInputCloud</a></div><div class="ttdeci">virtual void setInputCloud(const PointCloudConstPtr &amp;cloud)</div><div class="ttdoc">Provide a pointer to the input dataset</div><div class="ttdef"><b>Definition:</b> pcl_base.hpp:66</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html"><div class="ttname"><a href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a></div><div class="ttdoc">PointCloud represents the base class in PCL for storing collections of 3D points.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:173</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2185a6453f8ad905d7bdf7b45754a160"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">pcl::PointCloud::width</a></div><div class="ttdeci">uint32_t width</div><div class="ttdoc">The point cloud width (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:413</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a2d60b6927b31ef89cd3b97e8173ea4aa"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">pcl::PointCloud::resize</a></div><div class="ttdeci">void resize(size_t n)</div><div class="ttdoc">Resize the cloud</div><div class="ttdef"><b>Definition:</b> point_cloud.h:455</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_a4f34b45220c57f96607513ffad0d9582"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">pcl::PointCloud::height</a></div><div class="ttdeci">uint32_t height</div><div class="ttdoc">The point cloud height (if organized as an image-structure).</div><div class="ttdef"><b>Definition:</b> point_cloud.h:415</div></div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html_afebbbb9c522a94cf245dd3968b50ed5e"><div class="ttname"><a href="classpcl_1_1_point_cloud.html#afebbbb9c522a94cf245dd3968b50ed5e">pcl::PointCloud::makeShared</a></div><div class="ttdeci">Ptr makeShared() const</div><div class="ttdoc">Copy the cloud to the heap and return a smart pointer Note that deep copy is performed,...</div><div class="ttdef"><b>Definition:</b> point_cloud.h:588</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a28e930f16d7fda57f01372fd16e53ca2"><div class="ttname"><a href="classpcl_1_1kernel.html#a28e930f16d7fda57f01372fd16e53ca2">pcl::kernel::setKernelSize</a></div><div class="ttdeci">void setKernelSize(int kernel_size)</div><div class="ttdef"><b>Definition:</b> kernel.hpp:315</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a395a7f5e67afda97af97e2986881ee56"><div class="ttname"><a href="classpcl_1_1kernel.html#a395a7f5e67afda97af97e2986881ee56">pcl::kernel::setKernelSigma</a></div><div class="ttdeci">void setKernelSigma(float kernel_sigma)</div><div class="ttdef"><b>Definition:</b> kernel.hpp:322</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200a7c2a2b5986b6dcef92edb2a39e0cca77"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a7c2a2b5986b6dcef92edb2a39e0cca77">pcl::kernel::GAUSSIAN</a></div><div class="ttdeci">@ GAUSSIAN</div><div class="ttdoc">GAUSSIAN</div><div class="ttdef"><b>Definition:</b> kernel.h:67</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a5a2a615de18219e616975a7827ba3a1e"><div class="ttname"><a href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">pcl::kernel::setKernelType</a></div><div class="ttdeci">void setKernelType(KERNEL_ENUM kernel_type)</div><div class="ttdef"><b>Definition:</b> kernel.hpp:308</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a9e456d6d52904cca19e3eade21768065"><div class="ttname"><a href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">pcl::kernel::fetchKernel</a></div><div class="ttdeci">void fetchKernel(pcl::PointCloud&lt; PointT &gt; &amp;kernel)</div><div class="ttdef"><b>Definition:</b> kernel.hpp:43</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a4eab43d268ca04cfd96795b42b2d5184"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4eab43d268ca04cfd96795b42b2d5184">&#9670;&nbsp;</a></span>cannyTraceEdge()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::cannyTraceEdge </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>rowOffset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>colOffset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>row</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>col</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i.html">pcl::PointXYZI</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>maxima</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>This function performs edge tracing for Canny <a class="el" href="classpcl_1_1_edge.html">Edge</a> detector. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">rowOffset</td><td>row offset for direction in which the edge is to be traced </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">colOffset</td><td>column offset for direction in which the edge is to be traced </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">row</td><td>row location of the edge point </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">col</td><td>column location of the edge point </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">maxima</td><td>point cloud containing the edge information in the magnitude channel </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;{</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;  <span class="keywordtype">int</span> newRow = row + rowOffset;</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  <span class="keywordtype">int</span> newCol = col + colOffset;</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  PointXYZI &amp;pt = maxima (newCol, newRow);</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keywordflow">if</span> (newRow &gt; 0 &amp;&amp; newRow &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (maxima.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>) &amp;&amp; newCol &gt; 0 &amp;&amp; newCol &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (maxima.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>))</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  {</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordflow">if</span> (pt.intensity == 0.0f || pt.intensity == std::numeric_limits&lt;float&gt;::max ())</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    pt.intensity = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, 0, newRow, newCol, maxima);</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, 0, newRow, newCol, maxima);</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, 1, newRow, newCol, maxima);</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, -1, newRow, newCol, maxima);</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 0, -1, newRow, newCol, maxima);</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 0, 1, newRow, newCol, maxima);</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, 1, newRow, newCol, maxima);</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, -1, newRow, newCol, maxima);</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  }</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a805afa618ffc093ab12cd4253ce7137c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a805afa618ffc093ab12cd4253ce7137c">&#9670;&nbsp;</a></span>computeDerivativeXBackward()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::computeDerivativeXBackward </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the image derivatives in X direction using the kernel <a class="el" href="classpcl_1_1kernel.html#a0ea50bec02fb57c62f38caeb48f1c877">kernel::derivativeXBackwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a82119d613bffbc9ce96b8a65f56de15b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a82119d613bffbc9ce96b8a65f56de15b">&#9670;&nbsp;</a></span>computeDerivativeXCentral()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::computeDerivativeXCentral </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the image derivatives in X direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ae9872c476d857b7665ae966f5fbb7009">kernel::derivativeYCentralKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a3227632412f8b6edda7dd1da7c6f4c02"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3227632412f8b6edda7dd1da7c6f4c02">&#9670;&nbsp;</a></span>computeDerivativeXForward()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::computeDerivativeXForward </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the image derivatives in X direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ace4fa042f97d503bf18a8311c77211ec">kernel::derivativeYForwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a23a73f6f318bd1bd5038a74e60181895"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23a73f6f318bd1bd5038a74e60181895">&#9670;&nbsp;</a></span>computeDerivativeYBackward()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::computeDerivativeYBackward </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the image derivatives in Y direction using the kernel <a class="el" href="classpcl_1_1kernel.html#a233c00432f403a1157ac8cef7526dcc7">kernel::derivativeYBackwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ad720a4a1f05e90ce19c038fd7850890c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad720a4a1f05e90ce19c038fd7850890c">&#9670;&nbsp;</a></span>computeDerivativeYCentral()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::computeDerivativeYCentral </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the image derivatives in Y direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ae9872c476d857b7665ae966f5fbb7009">kernel::derivativeYCentralKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a0e4450135f1076257c5a50d1d2b7427e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e4450135f1076257c5a50d1d2b7427e">&#9670;&nbsp;</a></span>computeDerivativeYForward()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::computeDerivativeYForward </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Computes the image derivatives in Y direction using the kernel <a class="el" href="classpcl_1_1kernel.html#ace4fa042f97d503bf18a8311c77211ec">kernel::derivativeYForwardKernel</a>. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a1b924726c691308a9a50cad6be8b2eb0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b924726c691308a9a50cad6be8b2eb0">&#9670;&nbsp;</a></span>detectEdge()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::detectEdge </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This is a convenience function which performs edge detection based on the variable detector_kernel_type_ </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td></td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="aad4e235b723af6970e5337d53004116d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad4e235b723af6970e5337d53004116d">&#9670;&nbsp;</a></span>detectEdgeCanny()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::detectEdgeCanny </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>All edges of magnitude above t_high are always classified as edges. All edges below t_low are discarded. <a class="el" href="classpcl_1_1_edge.html">Edge</a> values between t_low and t_high are classified as edges only if they are connected to edges having magnitude &gt; t_high and are located in a direction perpendicular to that strong edge. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;{</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  <span class="keywordtype">float</span> tHigh = hysteresis_threshold_high_;</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  <span class="keywordtype">float</span> tLow = hysteresis_threshold_low_;</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = input_-&gt;height;</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = input_-&gt;width;</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160; </div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (height * width);</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = height;</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = width;</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160; </div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;  <span class="comment">//pcl::console::TicToc tt;</span></div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  <span class="comment">//tt.tic ();</span></div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  </div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  <span class="comment">// Noise reduction using gaussian blurring</span></div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr gaussian_kernel (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;  PointCloudInPtr smoothed_cloud (<span class="keyword">new</span> PointCloudIn);</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a28e930f16d7fda57f01372fd16e53ca2">setKernelSize</a> (3);</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a395a7f5e67afda97af97e2986881ee56">setKernelSigma</a> (1.0);</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a7c2a2b5986b6dcef92edb2a39e0cca77">kernel&lt;PointXYZI&gt;::GAUSSIAN</a>);</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*gaussian_kernel);</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*gaussian_kernel);</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_);</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*smoothed_cloud);</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;  <span class="comment">//PCL_ERROR (&quot;Gaussian blur: %g\n&quot;, tt.toc ()); tt.tic ();</span></div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;  </div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;  <span class="comment">// Edge detection usign Sobel</span></div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  pcl::PointCloud&lt;PointXYZIEdge&gt;::Ptr edges (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZIEdge&gt;</a>);</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  <a class="code" href="classpcl_1_1_edge.html#afe82b3dce432591dcda8c6a2fcc976ba">setInputCloud</a> (smoothed_cloud);</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  <a class="code" href="classpcl_1_1_edge.html#a3ffab54efcbfd029b6d758770e7e5da1">detectEdgeSobel</a> (*edges);</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  <span class="comment">//PCL_ERROR (&quot;Sobel: %g\n&quot;, tt.toc ()); tt.tic ();</span></div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;  </div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;  <span class="comment">// Edge discretization</span></div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;  <a class="code" href="classpcl_1_1_edge.html#a1ea900b41e25ccdef54f60b968b64e10">discretizeAngles</a> (*edges);</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;  <span class="comment">//PCL_ERROR (&quot;Discretize: %g\n&quot;, tt.toc ()); tt.tic ();</span></div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160; </div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;  <span class="comment">// tHigh and non-maximal supression</span></div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr maxima (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;  <a class="code" href="classpcl_1_1_edge.html#acdff65ad2e8341465470ef684b508f47">suppressNonMaxima</a> (*edges, *maxima, tLow);</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  <span class="comment">//PCL_ERROR (&quot;NM suppress: %g\n&quot;, tt.toc ()); tt.tic ();</span></div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160; </div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;  <span class="comment">// Edge tracing</span></div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; height; i++)</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  {</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; width; j++)</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    {</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;      <span class="keywordflow">if</span> ((*maxima)(j, i).intensity &lt; tHigh || (*maxima)(j, i).intensity == std::numeric_limits&lt;float&gt;::max ())</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160; </div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;      (*maxima)(j, i).intensity = std::numeric_limits&lt;float&gt;::max ();</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, 0, i, j, *maxima);</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, 0, i, j, *maxima);</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, 1, i, j, *maxima);</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, -1, i, j, *maxima);</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 0, -1, i, j, *maxima);</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 0, 1, i, j, *maxima);</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> (-1, 1, i, j, *maxima);</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;      <a class="code" href="classpcl_1_1_edge.html#a4eab43d268ca04cfd96795b42b2d5184">cannyTraceEdge</a> ( 1, -1, i, j, *maxima);</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    }</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;  }</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;  <span class="comment">//PCL_ERROR (&quot;Edge tracing: %g\n&quot;, tt.toc ());</span></div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160; </div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;  <span class="comment">// Final thresholding</span></div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; input_-&gt;size (); ++i)</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;  {</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    <span class="keywordflow">if</span> ((*maxima)[i].intensity == std::numeric_limits&lt;float&gt;::max ())</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;      output[i].magnitude = 255;</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;      output[i].magnitude = 0;</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;  }</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_edge_html_a3ffab54efcbfd029b6d758770e7e5da1"><div class="ttname"><a href="classpcl_1_1_edge.html#a3ffab54efcbfd029b6d758770e7e5da1">pcl::Edge::detectEdgeSobel</a></div><div class="ttdeci">void detectEdgeSobel(pcl::PointCloud&lt; PointOutT &gt; &amp;output)</div><div class="ttdoc">Uses the Sobel kernel for edge detection. This function does NOT include a smoothing step....</div><div class="ttdef"><b>Definition:</b> edge.hpp:47</div></div>
<div class="ttc" id="aclasspcl_1_1_edge_html_afe82b3dce432591dcda8c6a2fcc976ba"><div class="ttname"><a href="classpcl_1_1_edge.html#afe82b3dce432591dcda8c6a2fcc976ba">pcl::Edge::setInputCloud</a></div><div class="ttdeci">void setInputCloud(PointCloudInPtr input)</div><div class="ttdoc">Set the input point cloud pointer</div><div class="ttdef"><b>Definition:</b> edge.h:297</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a322ca7dc5db4d05189e53b1acbad3cb6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a322ca7dc5db4d05189e53b1acbad3cb6">&#9670;&nbsp;</a></span>detectEdgeLoG()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::detectEdgeLoG </td>
          <td>(</td>
          <td class="paramtype">const float&#160;</td>
          <td class="paramname"><em>kernel_sigma</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const float&#160;</td>
          <td class="paramname"><em>kernel_size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Uses the LoG kernel for edge detection. Zero crossings of the Laplacian operator applied on an image indicate edges. Gaussian kernel is used to smoothen the image prior to the Laplacian. This is because Laplacian uses the second order derivative of the image and hence, is very sensitive to noise. The implementation is not two-step but rather applies the LoG kernel directly. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">kernel_sigma</td><td>variance of the LoG kernel used. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">kernel_size</td><td>a LoG kernel of dimensions kernel_size x kernel_size is used. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;{</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_);</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160; </div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr log_kernel (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200ab6c4852261c6ad2bca9839af9db8b08d">kernel&lt;PointXYZI&gt;::LOG</a>);</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a395a7f5e67afda97af97e2986881ee56">setKernelSigma</a> (kernel_sigma);</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a28e930f16d7fda57f01372fd16e53ca2">setKernelSize</a> (kernel_size);</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*log_kernel);</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*log_kernel);</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (output);</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200ab6c4852261c6ad2bca9839af9db8b08d"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200ab6c4852261c6ad2bca9839af9db8b08d">pcl::kernel::LOG</a></div><div class="ttdeci">@ LOG</div><div class="ttdoc">LOG</div><div class="ttdef"><b>Definition:</b> kernel.h:60</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a2fde1fd46a127c891ff8ade9e1c2c1e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2fde1fd46a127c891ff8ade9e1c2c1e2">&#9670;&nbsp;</a></span>detectEdgePrewitt()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::detectEdgePrewitt </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Uses the Prewitt kernel for edge detection. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;{</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_);</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200afba69b45d8a8575296bfed75750b6825">kernel&lt;PointXYZI&gt;::PREWITT_X</a>);</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_x);</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160; </div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200aa9402162cbfa4219c556f60dbf862845">kernel&lt;PointXYZI&gt;::PREWITT_Y</a>);</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_y);</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = input_-&gt;height;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = input_-&gt;width;</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160; </div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (height * width);</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = height;</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = width;</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; output.size (); ++i)</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  {</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    output[i].magnitude_x = (*magnitude_x)[i].intensity;</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    output[i].magnitude_y = (*magnitude_y)[i].intensity;</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    output[i].magnitude = </div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;      std::sqrt ((*magnitude_x)[i].intensity * (*magnitude_x)[i].intensity + </div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                 (*magnitude_y)[i].intensity * (*magnitude_y)[i].intensity);</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    output[i].direction = </div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;      atan2f ((*magnitude_y)[i].intensity, (*magnitude_x)[i].intensity);</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  }</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200aa9402162cbfa4219c556f60dbf862845"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200aa9402162cbfa4219c556f60dbf862845">pcl::kernel::PREWITT_Y</a></div><div class="ttdeci">@ PREWITT_Y</div><div class="ttdoc">PREWITT_Y</div><div class="ttdef"><b>Definition:</b> kernel.h:57</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200afba69b45d8a8575296bfed75750b6825"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200afba69b45d8a8575296bfed75750b6825">pcl::kernel::PREWITT_X</a></div><div class="ttdeci">@ PREWITT_X</div><div class="ttdoc">PREWITT_X</div><div class="ttdef"><b>Definition:</b> kernel.h:56</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a7abd51b78b9049d54385478b03533150"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7abd51b78b9049d54385478b03533150">&#9670;&nbsp;</a></span>detectEdgeRoberts()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::detectEdgeRoberts </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Uses the Roberts kernel for edge detection. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;{</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_);</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160; </div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a6a14b0662ec7eb1a00d19093de521dc9">kernel&lt;PointXYZI&gt;::ROBERTS_X</a>);</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_x);</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160; </div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a14b5d08f0d91e409e180ac85edb6ee28">kernel&lt;PointXYZI&gt;::ROBERTS_Y</a>);</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_y);</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160; </div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = input_-&gt;height;</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = input_-&gt;width;</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (height * width);</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = height;</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = width;</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160; </div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; output.size (); ++i)</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  {</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    output[i].magnitude_x = (*magnitude_x)[i].intensity;</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    output[i].magnitude_y = (*magnitude_y)[i].intensity;</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    output[i].magnitude = </div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;      std::sqrt ((*magnitude_x)[i].intensity * (*magnitude_x)[i].intensity + </div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                 (*magnitude_y)[i].intensity * (*magnitude_y)[i].intensity);</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    output[i].direction = </div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;      atan2f ((*magnitude_y)[i].intensity, (*magnitude_x)[i].intensity);</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  }</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200a14b5d08f0d91e409e180ac85edb6ee28"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a14b5d08f0d91e409e180ac85edb6ee28">pcl::kernel::ROBERTS_Y</a></div><div class="ttdeci">@ ROBERTS_Y</div><div class="ttdoc">ROBERTS_Y</div><div class="ttdef"><b>Definition:</b> kernel.h:59</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200a6a14b0662ec7eb1a00d19093de521dc9"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a6a14b0662ec7eb1a00d19093de521dc9">pcl::kernel::ROBERTS_X</a></div><div class="ttdeci">@ ROBERTS_X</div><div class="ttdoc">ROBERTS_X</div><div class="ttdef"><b>Definition:</b> kernel.h:58</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a3ffab54efcbfd029b6d758770e7e5da1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ffab54efcbfd029b6d758770e7e5da1">&#9670;&nbsp;</a></span>detectEdgeSobel()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::detectEdgeSobel </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Uses the Sobel kernel for edge detection. This function does NOT include a smoothing step. The image should be smoothed before using this function to reduce noise. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>Output point cloud passed by reference </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  <span class="comment">//pcl::console::TicToc tt;</span></div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="comment">//tt.tic ();</span></div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_);</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a43eb6cc6f3cf74e8e59ff25add337375">kernel&lt;PointXYZI&gt;::SOBEL_X</a>);</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_x);</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  <span class="comment">//PCL_ERROR (&quot;Convolve X: %g\n&quot;, tt.toc ()); tt.tic ();</span></div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a68fc86c6b6a9f2f1e7093ab0aeca82e4">kernel&lt;PointXYZI&gt;::SOBEL_Y</a>);</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_y);</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="comment">//PCL_ERROR (&quot;Convolve Y: %g\n&quot;, tt.toc ()); tt.tic ();</span></div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = input_-&gt;height;</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = input_-&gt;width;</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (height * width);</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = height;</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = width;</div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; output.size (); ++i)</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  {</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    output[i].magnitude_x = (*magnitude_x)[i].intensity;</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    output[i].magnitude_y = (*magnitude_y)[i].intensity;</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    output[i].magnitude = </div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      std::sqrt ((*magnitude_x)[i].intensity * (*magnitude_x)[i].intensity + </div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;                 (*magnitude_y)[i].intensity * (*magnitude_y)[i].intensity);</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    output[i].direction = </div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;      atan2f ((*magnitude_y)[i].intensity, (*magnitude_x)[i].intensity);</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  }</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="comment">//PCL_ERROR (&quot;Rest: %g\n&quot;, tt.toc ());</span></div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200a43eb6cc6f3cf74e8e59ff25add337375"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a43eb6cc6f3cf74e8e59ff25add337375">pcl::kernel::SOBEL_X</a></div><div class="ttdeci">@ SOBEL_X</div><div class="ttdoc">SOBEL_X</div><div class="ttdef"><b>Definition:</b> kernel.h:54</div></div>
<div class="ttc" id="aclasspcl_1_1kernel_html_a51aa54fcb30b6f085acccbc3c1f40200a68fc86c6b6a9f2f1e7093ab0aeca82e4"><div class="ttname"><a href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a68fc86c6b6a9f2f1e7093ab0aeca82e4">pcl::kernel::SOBEL_Y</a></div><div class="ttdeci">@ SOBEL_Y</div><div class="ttdoc">SOBEL_Y</div><div class="ttdef"><b>Definition:</b> kernel.h:55</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a1ea900b41e25ccdef54f60b968b64e10"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ea900b41e25ccdef54f60b968b64e10">&#9670;&nbsp;</a></span>discretizeAngles()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::discretizeAngles </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>thet</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>This function discretizes the edge directions in steps of 22.5 degrees. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">thet</td><td>point cloud containing the edge information in the direction channel </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;{</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = thet.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = thet.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  <span class="keywordtype">float</span> angle;</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; height; i++)</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  {</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; width; j++)</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    {</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      angle = <a class="code" href="group__common.html#ga3177c2c084674693cc38f03e80b6ad77">pcl::rad2deg</a> (thet (j, i).direction);</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;      <span class="keywordflow">if</span> (((angle &lt;= 22.5) &amp;&amp; (angle &gt;= -22.5)) || (angle &gt;= 157.5) || (angle &lt;= -157.5))</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        thet (j, i).direction = 0;</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        <span class="keywordflow">if</span> (((angle &gt; 22.5) &amp;&amp; (angle &lt; 67.5)) || ((angle &lt; -112.5) &amp;&amp; (angle &gt; -157.5)))</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;          thet (j, i).direction = 45;</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;          <span class="keywordflow">if</span> (((angle &gt;= 67.5) &amp;&amp; (angle &lt;= 112.5)) || ((angle &lt;= -67.5) &amp;&amp; (angle &gt;= -112.5)))</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            thet (j, i).direction = 90;</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;          <span class="keywordflow">else</span></div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;            <span class="keywordflow">if</span> (((angle &gt; 112.5) &amp;&amp; (angle &lt; 157.5)) || ((angle &lt; -22.5) &amp;&amp; (angle &gt; -67.5)))</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;              thet (j, i).direction = 135;</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    }</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  }</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga3177c2c084674693cc38f03e80b6ad77"><div class="ttname"><a href="group__common.html#ga3177c2c084674693cc38f03e80b6ad77">pcl::rad2deg</a></div><div class="ttdeci">float rad2deg(float alpha)</div><div class="ttdoc">Convert an angle from radians to degrees</div><div class="ttdef"><b>Definition:</b> angles.hpp:61</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="afe82b3dce432591dcda8c6a2fcc976ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe82b3dce432591dcda8c6a2fcc976ba">&#9670;&nbsp;</a></span>setInputCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::setInputCloud </td>
          <td>(</td>
          <td class="paramtype">PointCloudInPtr&#160;</td>
          <td class="paramname"><em>input</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the input point cloud pointer </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>pointer to input point cloud </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;      {</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        input_ = input;</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a0ccda4c15b8537ec3ff3639f8dadf49c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0ccda4c15b8537ec3ff3639f8dadf49c">&#9670;&nbsp;</a></span>setOutputType()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::setOutputType </td>
          <td>(</td>
          <td class="paramtype">OUTPUT_TYPE&#160;</td>
          <td class="paramname"><em>output_type</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the output type. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">output_type</td><td>the output type </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;      {</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        output_type_ = output_type;</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5d4992dd5bf3458ad013c55885a9a175"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d4992dd5bf3458ad013c55885a9a175">&#9670;&nbsp;</a></span>sobelMagnitudeDirection()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::sobelMagnitudeDirection </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>input_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointInT &gt; &amp;&#160;</td>
          <td class="paramname"><em>input_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointOutT &gt; &amp;&#160;</td>
          <td class="paramname"><em>output</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_x</td><td></td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_y</td><td></td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td></td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;{</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_x.<a class="code" href="classpcl_1_1_point_cloud.html#afebbbb9c522a94cf245dd3968b50ed5e">makeShared</a>());</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_x (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a43eb6cc6f3cf74e8e59ff25add337375">kernel&lt;PointXYZI&gt;::SOBEL_X</a>);</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_x);</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_x);</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_p_c_l_base.html#a1952d7101f3942bac3b69ed55c1ca7ea">setInputCloud</a> (input_y.<a class="code" href="classpcl_1_1_point_cloud.html#afebbbb9c522a94cf245dd3968b50ed5e">makeShared</a>());</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr kernel_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  pcl::PointCloud&lt;PointXYZI&gt;::Ptr magnitude_y (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">pcl::PointCloud&lt;PointXYZI&gt;</a>);</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a5a2a615de18219e616975a7827ba3a1e">setKernelType</a> (<a class="code" href="classpcl_1_1kernel.html#a51aa54fcb30b6f085acccbc3c1f40200a68fc86c6b6a9f2f1e7093ab0aeca82e4">kernel&lt;PointXYZI&gt;::SOBEL_Y</a>);</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  kernel_.<a class="code" href="classpcl_1_1kernel.html#a9e456d6d52904cca19e3eade21768065">fetchKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#abd56054085b145cba9e22eac32f49ad3">setKernel</a> (*kernel_y);</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  convolution_.<a class="code" href="classpcl_1_1_convolution.html#ad67fdb49fef519511a8332271f1ae18d">filter</a> (*magnitude_y);</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = input_x.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = input_x.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (height * width);</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = height;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  output.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = width;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; output.size (); ++i)</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  {</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    output[i].magnitude_x = (*magnitude_x)[i].intensity;</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    output[i].magnitude_y = (*magnitude_y)[i].intensity;</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    output[i].magnitude = </div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;      std::sqrt ((*magnitude_x)[i].intensity * (*magnitude_x)[i].intensity + </div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                 (*magnitude_y)[i].intensity * (*magnitude_y)[i].intensity);</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    output[i].direction = </div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;      atan2f ((*magnitude_y)[i].intensity, (*magnitude_x)[i].intensity);</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  }</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="acdff65ad2e8341465470ef684b508f47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acdff65ad2e8341465470ef684b508f47">&#9670;&nbsp;</a></span>suppressNonMaxima()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointInT , typename PointOutT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_edge.html">pcl::Edge</a>&lt; PointInT, PointOutT &gt;::suppressNonMaxima </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i_edge.html">PointXYZIEdge</a>&lt; PointInT, PointOutT &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>edges</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_i.html">pcl::PointXYZI</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>maxima</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>tLow</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>This function suppresses the edges which don't form a local maximum in the edge direction. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">edges</td><td>point cloud containing all the edges </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">maxima</td><td>point cloud containing the non-max supressed edges </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tLow</td><td></td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;{</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> height = edges.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a>;</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> width = edges.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a>;</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160; </div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  maxima.<a class="code" href="classpcl_1_1_point_cloud.html#a4f34b45220c57f96607513ffad0d9582">height</a> = height;</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;  maxima.<a class="code" href="classpcl_1_1_point_cloud.html#a2185a6453f8ad905d7bdf7b45754a160">width</a> = width;</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  maxima.<a class="code" href="classpcl_1_1_point_cloud.html#a2d60b6927b31ef89cd3b97e8173ea4aa">resize</a> (height * width);</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160; </div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; maxima.size (); ++i)</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    maxima[i].intensity = 0.0f;</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160; </div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  <span class="comment">// tHigh and non-maximal supression</span></div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; height - 1; i++)</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  {</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 1; j &lt; width - 1; j++)</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    {</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;      <span class="keyword">const</span> PointXYZIEdge &amp;ptedge = edges (j, i);</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;      PointXYZI &amp;ptmax = maxima (j, i);</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160; </div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;      <span class="keywordflow">if</span> (ptedge.magnitude &lt; tLow)</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160; </div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;      <span class="comment">//maxima (j, i).intensity = 0;</span></div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;      </div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;      <span class="keywordflow">switch</span> (<span class="keywordtype">int</span> (ptedge.direction))</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;      {</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        <span class="keywordflow">case</span> 0:</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        {</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;          <span class="keywordflow">if</span> (ptedge.magnitude &gt;= edges (j - 1, i).magnitude &amp;&amp; </div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;              ptedge.magnitude &gt;= edges (j + 1, i).magnitude)</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;            ptmax.intensity = ptedge.magnitude;</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        }</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        <span class="keywordflow">case</span> 45:</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        {</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;          <span class="keywordflow">if</span> (ptedge.magnitude &gt;= edges (j - 1, i - 1).magnitude &amp;&amp; </div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;              ptedge.magnitude &gt;= edges (j + 1, i + 1).magnitude)</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;            ptmax.intensity = ptedge.magnitude;</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        }</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        <span class="keywordflow">case</span> 90:</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;        {</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;          <span class="keywordflow">if</span> (ptedge.magnitude &gt;= edges (j, i - 1).magnitude &amp;&amp; </div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;              ptedge.magnitude &gt;= edges (j, i + 1).magnitude)</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;            ptmax.intensity = ptedge.magnitude;</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        }</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="keywordflow">case</span> 135:</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        {</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;          <span class="keywordflow">if</span> (ptedge.magnitude &gt;= edges (j + 1, i - 1).magnitude &amp;&amp; </div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;              ptedge.magnitude &gt;= edges (j - 1, i + 1).magnitude)</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;            ptmax.intensity = ptedge.magnitude;</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;          <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        }</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;      }</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    }</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  }</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>2d/include/pcl/2d/<a class="el" href="edge_8h_source.html">edge.h</a></li>
<li>2d/include/pcl/2d/impl/<a class="el" href="edge_8hpp_source.html">edge.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><a class="el" href="classpcl_1_1_edge.html">Edge</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
